package com.szholly.plug.form.entity;

import com.szholly.utils.util.StringUtils;
import com.szholly.data.general.GlobalDataType;
import com.szholly.data.general.RowBase;

/**
 * 定义表单的录入表单信息
 */
public class FormFieldRow extends RowBase {

	private static final long serialVersionUID = -449075962686917386L;

	/**
	 * 表单信息ID
	 */
	public static String PROP_FORMINFOID = "FORMINFO_ID";

	/**
	 * 表单ID
	 */
	public static String PROP_FORMID = "FORM_ID";

	/**
	 * 字段名称
	 */
	public final static String FIELD_FIELDNAME = "S_FIELDNAME";

	/**
	 * 字段别名
	 */
	public final static String FIELD_FIELDALIASNAME = "S_FIELDALIASNAME";

	/**
	 * 字段类型
	 */
	public final static String FIELD_DATATYPE = "S_DATATYPE";

	/**
	 * 长度
	 */
	public final static String FIELD_MAXLEN = "I_MAXLEN";

	/**
	 * 小数位长度
	 */
	public final static String FIELD_DECIMALDIGITS = "I_DECIMALDIGITS";

	/**
	 * 录入使用控件
	 */
	public final static String FIELD_CONTROLTYPE = "S_CONTROLTYPE";

	/**
	 * 字段单位
	 */
	public final static String FIELD_UNIT = "S_UNIT";
	
	/**
	 * 是否必填
	 */
	public final static String FIELD_ALLOWNULL = "S_ALLOWNULL";
	
	/**
	 * 排序号
	 */
	public final static String FIELD_ORDER = "I_FIELDID";
	
	/**
	 * 是否在列表中展示
	 */
	public final static String FIELD_GRID = "S_GRID";
	
	/**
	 * 是否应用于高级查询
	 */
	public final static String FIELD_SUPERSEARCH = "S_SUPERSEARCH";
	
	/**
	 * 是否应用于查询
	 */
	public final static String FIELD_SEARCH = "S_SEARCH";
	
	/**
	 * 是否独占一行
	 */
	public final static String FIELD_ONEROW = "S_ONEROW";
	
	/**
	 * 字典域
	 */
	public final static String FIELD_CODETABLEPK = "S_CODETABLEPK";

	/**
	 * 字典域条件
	 */
	public final static String FIELD_CODETABLEWHERE = "S_CODETABLEWHERE";

	/**
	 * 获取表单信息ID
	 */
	public String getFormInfoId() {
		return (String) getValue(GlobalDataType.String, PROP_FORMINFOID);
	}

	/**
	 * 设置表单信息ID
	 */
	public void setFormInfoId(String id) {
		setValue(PROP_FORMINFOID, id);
	}

	/**
	 * 获取表单ID
	 */
	public String getFormId() {
		return (String) getValue(GlobalDataType.String, PROP_FORMID);
	}

	/**
	 * 设置表单ID
	 */
	public void setFormId(String id) {
		setValue(PROP_FORMID, id);
	}

	/**
	 * 字段名称
	 */
	public String getFieldName() {
		return (String) getValue(GlobalDataType.String, FIELD_FIELDNAME);
	}

	public void setFieldName(String value) {
		setValue(FIELD_FIELDNAME, value);
	}

	/**
	 * 字段别名
	 */
	public String getFieldAliasName() {
		return (String) getValue(GlobalDataType.String, FIELD_FIELDALIASNAME);
	}

	public void setFieldAliasName(String value) {
		setValue(FIELD_FIELDALIASNAME, value);
	}

	/**
	 * 字段类型
	 */
	public String getDataType() {
		return (String) getValue(GlobalDataType.String, FIELD_DATATYPE);
	}

	public void setDataType(String value) {
		setValue(FIELD_DATATYPE, value);
	}

	/**
	 * 长度
	 */
	public int getMaxLen() {
		Integer result = (Integer) getValue(GlobalDataType.Int32, FIELD_MAXLEN);
		if (null == result) {
			return 0;
		} else {
			return result.intValue();
		}
	}

	public void setMaxLen(int value) {
		setValue(FIELD_MAXLEN, value);
	}

	/**
	 * 小数位长度
	 */
	public int getDecimaldigits() {
		int result = 0;
		try {
			result = (Integer) getValue(GlobalDataType.Int32,
					FIELD_DECIMALDIGITS);
		} catch (Exception e) {
		}

		return result;
	}

	public void setDecimaldigits(int value) {
		setValue(FIELD_DECIMALDIGITS, value);
	}

	/**
	 * 录入使用控件
	 */
	public String getControlType() {
		return (String) getValue(GlobalDataType.String, FIELD_CONTROLTYPE);
	}

	public void setControlType(String value) {
		setValue(FIELD_CONTROLTYPE, value);
	}

	/**
	 * 字段单位
	 */
	public String getUnit() {
		return (String) getValue(GlobalDataType.String, FIELD_UNIT);
	}

	public void setUnit(String value) {
		setValue(FIELD_UNIT, value);
	}
	
	/**
	 * 是否可以为空
	 */
	public boolean getAllowNull() {
		return getBool(FIELD_ALLOWNULL);
	}

	public void setAllowNull(boolean value) {
		setBool(value, FIELD_ALLOWNULL);
	}
	
	private void setBool(boolean value, String fieldName) {
		if (value)
			setValue(fieldName, "是");
		else
			setValue(fieldName, "否");
	}

	private boolean getBool(String fieldName) {
		String strBool = (String) getValue(GlobalDataType.String, fieldName);
		if (StringUtils.IsNullOrSpace(strBool))
			return false;
		else {
			strBool = strBool.trim().toUpperCase();
			if (strBool.equals("1") || strBool.equals("TRUE")
					|| strBool.equals("是"))
				return true;
			else
				return false;
		}
	}
}